package LC;

import java.util.ArrayList;
import java.util.Stack;

/**
 * @author lhn
 * @date 2024-09-26 15:50
 * 151. 反转字符串中的单词
 * 给你一个字符串 s ，请你反转字符串中 单词 的顺序。
 * 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
 * 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
 * <p>
 * 注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
 */

public class ReverseWordsInAString {
    public static void main(String[] args) {
        System.out.println(reverseWords("the sky is blue"));
        System.out.println(reverseWords("  hello world  "));
        System.out.println(reverseWords("a good   example"));
        System.out.println(reverseWords("  Bob    Loves  Alice   "));
    }


    public static String reverseWords(String s) {

        String[] strs = s.trim().split(" ");        // 删除首尾空格，分割字符串
        StringBuilder res = new StringBuilder();
        for (int i = strs.length - 1; i >= 0; i--) { // 倒序遍历单词列表
            if (strs[i].equals("")) continue;        // 遇到空单词则跳过
            res.append(strs[i] + " ");              // 将单词拼接至 StringBuilder
        }
        return res.toString().trim();               // 转化为字符串，删除尾部空格，并返回

    }

    public static String reverseWords2(String s) {
//        String sentence = s.trim(); // 去除首尾空格
        StringBuilder sb = new StringBuilder();
        boolean isSpace = false;    // 判断是否是第一个空格是否被扫描(单词与单词之间)
        String word = "";

        for (int i = s.length() - 1; i >= 0; i--) {
            // 判断头尾是否为空格，如果是，则跳过
            if (s.charAt(i) == ' ' && (i == s.length() - 1 || i == 0)) {
                isSpace = true;
                continue;
            } else if (s.charAt(i) == ' ') {
                if (!isSpace) {
                    word = word + " ";
                    isSpace = true;
                    sb.append(word);
                    word = "";
                }
            } else {
                word = s.charAt(i) + word;
                isSpace = false;
            }
        }
        // 如果最后一个字符不是空格，则添加到sb中
        if (!word.isEmpty()) {
            sb.append(word);
        }
        return sb.toString().trim();
    }
}

